<?php
namespace app\mamx_forum\controller;
use think\facade\Db;
use think\facade\Filesystem;
use think\Validate\ValidateRule;


class Index extends \app\BaseController
{
    // 检查 sid 合法性
    public function checkSID($sid){
        $re = Db::name('section')
            ->field('s_name')
            ->where('s_id',$sid)
            ->find();
        if($re == null){
            // 不合法
            $this->error('你访问的页面不存在','index/index');
        }else{
            return($re['s_name']);
        }
    }
    // 检查 mid 合法性
    public function checkMID($mid){
        $re = Db::name('mes')
            ->where('m_id',$mid)
            ->find();
        if($re == null){
            // 不合法
            $this->error('你访问的页面不存在');
        }
    }
    //  I组 2类方法，渲染门户页面
    public function inDex($sid = 0)
    {
        // 查询板块
        $sec = $this->showSec();
		// 查询轮播图
		if ($sid == 0) {
		    # 加载全部帖子
		    $thisSec = '全部';
		    $mes = Db::view('mes','m_id,m_title,m_content,m_create,m_unick,mbin')
		    ->view('user','u_img','user.u_nick=mes.m_unick')
			->order('m_create','desc')
			->limit(10)
			->select();
		}else{
			// 检查帖子合法性
			$thisSec=$this->checkSId($sid);
			$mes = Db::view('mes','m_id,m_title,m_content,m_create,m_unick,mbin')
			    ->view('user','u_img','user.u_nick=mes.m_unick')
			    ->where('m_sid',$sid)
				->select();
		}
		$result = Db::name('carousel')
				->where('c_disabled','审核通过')
				->where('c_ok','已使用')
				->select();
		$adv = Db::name('adv')
			->where('checkcolor','black')
			->where('stopcolor','black')
			->select();
    	return view('',['sec' => $sec,'result' => $result,'mes'=>$mes,'adv'=>$adv]);
    }
    //  I组 2类方法，渲染回复帖子页面
    public function deTail()
    {
    	// 查询板块
        $sec = $this->showSec();
        // 检查合法性
        $this->checkMID(input('mid'));
        // 查询帖子
        // mes+section+user
        $mesDetail = Db::view('mes','m_title,m_create,m_content,m_unick,mbin')
                    ->view('section','s_name','section.s_id=mes.m_sid')
                    ->view('user','u_img','user.u_nick=mes.m_unick')
                    ->where('m_id',input('mid'))
                    ->find();
        // 查询回复帖子
        // res+mes+user
        $resDetail = $re = Db::view('res','r_content,r_createat,r_unick,rbin')
                    ->view('user','u_img','user.u_nick=res.r_unick')
                    ->where('r_mid',input('mid'))
                    ->paginate(2);
        // 总数
        $total = $re->total();
        // 分页页面
        $page = $re->render();

        return view('',['sec' => $sec,'mesDetail'=>$mesDetail,'resDetail'=>$resDetail,'total' => $total,'page'=>$page]);
    }
    //  I组 1类方法 执行回复的写入
    public function response(){
        // 检查登录状态
        $this->check();
        // 检查合法性
        $this->checkMID(input('mid'));
        // 准备数据
        $resRow = [
        'r_content' => input('rcontent'),
        'r_unick' => session('uNick'),
        'r_createat' => date('Y-m-d H:i'),
        'r_mid' => input('mid')        
        ];
        // 写入回复
        $re = Db::name('res')
            ->strict(false)
            ->insert($resRow);
        if ($re == 1){
            // 成功提示跳转
        $this->success('回复成功',url('index/detail',['mid' => input('mid')]));
    }else{
        // 失败
        $this->success('回复失败',url('index/detail',['mid' => input('mid')]));
    }
        
    }
    // I组 2类方法 渲染帖子列表页面
    public function View($sid = 0)
    {
        // 查询板块
        $sec = $this->showSec();
        if ($sid == 0) {
            # 加载全部帖子
            $thisSec = '全部';
            $re = Db::view('mes','m_id,m_title,m_content,m_create,m_unick,mbin')
            ->view('user','u_img','user.u_nick=mes.m_unick')
			->order('m_create','desc')
            // ->where('m_sid',input('sid'))
            ->paginate(4);
        }else{
            // 检查帖子合法性
            $thisSec=$this->checkSId($sid);
            // 查询帖子
            // mes+user
            $re = Db::view('mes','m_id,m_title,m_content,m_create,m_unick,mbin')
                ->view('user','u_img','user.u_nick=mes.m_unick')
                ->where('m_sid',$sid)
                ->paginate(3);
        }
        
        // 总数
        $total = $re->total();
        // 分页页面
        $page = $re->render();
        // dump($re);

    	return view('',['sec' => $sec,'mes' => $re,'thisSec' => $thisSec,'total' => $total,'page'=>$page]);
    }
    // I组 2类方法 渲染发帖页面
     public function Post()
    {
        // 检查登录状态
        $this->check();
        // 检查帖子合法性
        $thisSec=$this->checkSId(input('sid'));
        // 查询板块
        $sec = $this->showSec();
        return view('',['sec' => $sec,'thisSec'=>$thisSec]);
    }
    // I组 1类方法 执行发布帖子的写入
    public function doPost()
    {
        // 检查登录状态
        $this->check();
		// 查询用户权限
		$user = Db::name('user')
				->where('u_nick',session('uNick'))
				->find();
		$checkpower = $user['u_check'];
        // 检查帖子合法性
        $thisSec=$this->checkSId(input('sid'));
        //准备写入
        // $date= "2013-10-01 12:23"
        $mesRow = [
        'm_title' => input('mtitle'),
        'm_content' => input('mcontent'),
        'm_unick' => session('uNick'),
        'm_create' => date('Y-m-d H:i'),
        'm_sid' => input('sid')
        ];
		// 判断是否能发言
			if($checkpower == '正常登录、不能发言'){
				$this->error('您的账号被禁止发言，请联系管理员修改');
			}else{
				// 写入帖子
				$re = Db::name('mes')
					->insert($mesRow);
				if ($re == 1) {
					// 提示跳转
					$this->success('发布成功！',url('index/view',['sid' => input('sid')]));
				}else{
					$this->error('发布失败！请稍后重试！！！',url('view',['sid' => input('sid')]));
				}
			}
    }
    // I组 2类方法 渲染发布头像页面
    public function Me()
    {
        // 检查登录状态
        $this->check();
        // 查询板块
        $sec = $this->showSec();
        return view('',['sec' => $sec]);
    }
    // I组 1类方法 执行上传头像的写入
    public function upMe()
    {
        // 检查登录状态
        $this->check();
        //I组 获取表单文件对象
        $uImg = request()->file('uimg');
        // 上传图片验证
        try{
            validate([
                'file'=>'fileSize:102400|fileExt:jpg,png,gif|image'   #限制图片大小不能超过100KB，后缀只能为jpg，png，gif
                ])->check(['file'=>$uImg]);
        // 上传到本地服务器
        $saveName = Filesystem::disk('public')->putFile('',$uImg);
    }catch(\think\exception\ValidateException $e){
        $returnM = $e->getMessage();
        $this->error($returnM);  #错误提示
        exit();
    }
        // echo "$saveName";
        // 文件完整路径
        $fileName = app()->getRootPath() . 'public/static/mamx_forum/upload'. '/' . $saveName;
        // 判断文件是否存在
        if (!file_exists($fileName)) {
            #文件不存在
            $this->error('头像上传失败，请重试！！','index');
        }
       
        // 头像更新
        $re = Db::name('user')
                ->where('u_nick',session('uNick'))
                ->update(['u_img' => $saveName]);
            // 判断更新结果 
        if ($re == 1){
            // 更新成功
            // 删除旧头像，不是默认头像
            if(strlen(session('uImg')) > 15){
                unlink(app()->getRootPath() . 'public/static/mamx_forum/upload'. '/' .session('uImg'));
            }
            // 更新当前用户头像信息
            session('uImg',$saveName);
            // 提示跳转
             $this->success('头像更新成功！','index/index');
        }else{
            // 更新失败
            // 删除刚刚上传的头像
            unlink($fileName);
            // 提示跳转
             $this->error('头像更新失败！','index/index');
        }
        // 提示跳转
        // $this->success('上传成功！','index/me');
    }
    // I组 2类方法 渲染联系我们的页面
    public function conTact()
    {
        // 检查登录状态
        $this->check();
        // 查询板块
        $sec = $this->showSec();
        return view('',['sec' => $sec]);
    }
    // I组 2类方法 渲染用户修改密码页面
    public function changePa()
    {
        // 检查登录状态
        $this->check();
        // 查询板块
        $sec = $this->showSec();
        return view('',['sec' => $sec]);
    }
    // I组 1类方法 执行用户密码的修改
     public function modiPa()
    {
        // 检查登录状态
        $this->check();
        //数据库update查询
		$user = session('uNick');
		$oldPa = md5(input('oldpa'));
		$newPa = md5(input('newpa'));
		$aGain = md5(input('again'));
		if($newPa == $aGain){
			$dopa = Db::name('user')
					->where('u_nick',$user)
					->where('u_pa',$oldPa)
					->update(['u_pa' => $newPa]);
					if($dopa == 1){
						$this->success('密码修改成功，请重新登录！','user/logout');
					}else{
						$this->error('密码修改失败');					  
					}
		}else{
			$this->error('两次密码不一致，请重新输入！！','index/changepa');
		}
    }
}

